package com.crm.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.crm.entity.User;
import com.crm.service.UserService;
import com.crm.util.JwtToken;
import com.crm.util.MD5Utils;
import com.crm.util.Result;
import com.crm.util.Token;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@RestController
public class LoginController {
    @Resource//设置注入方式，spring 自动在spring容器找到叫这个名或这个类型的对象，赋给当前属性，controller调 用service
    private UserService userService;
    /**
     * 用户登录
     *
     * @param userName 用户名
     * @param password       密码
     * @return 结果
     */
    @RequestMapping("/login") // 客户端请求地址
    public Object login(String userName, String password,Token t) {
        String password2=MD5Utils.stringToMD5(password);
        Map<String, Object> map = new HashMap<String, Object>();
        //，第一步，判断数据库是否存在该用户
        User users = userService.findByName(userName);
        if (users != null) {
            if (users.getIsLockout() == 1) {//判断是否锁定，如果锁定，返回数据
                return new Result(1,  "您的账号因多次登录失败被锁定");

            } else if (!password2.equals(users.getPassword())) {//判断密码是否正确
                if (users.getPsdWrong() == 2) {//如果用完登录机会，就锁定,并修改锁定时间
                    users.setIsLockout(1);//就锁定
                    users.setLockTime(new Date());//设置锁定时间
                    userService.update(users, new QueryWrapper<User>().eq("uid", users.getUid()));//执行操作
                    return new Result(1,  "您的账号因多次登录失败被锁定");
                } else {
                    //如果错误，更改错误次数+1
                    users.setPsdWrong(users.getPsdWrong() + 1);//更改错误次数+1
                    userService.update(users, new QueryWrapper<User>().eq("uid", users.getUid()));

                    return new Result(1,  "密码错误，还有" + (3 - users.getPsdWrong()) + "次输入机会");
                }
            } else {
                //生成tokenId,有效时间时30分钟
                try {
                    String tokenId = JwtToken.sign(new Token(users.getUid(), users.getUserName(), users.getPassword()), 60*60 * 1000);
                    //更新登录时间
                    users.setLockTime(null);
                    users.setLastLoginTime(new Date());
                    users.setPsdWrong(0);//让错误次数清空
                    userService.update(users, new QueryWrapper<User>().eq("uid", users.getUid()));
                    map.put("success", true);
                    map.put("uid", users.getUid());
                    map.put("rid",userService.getRidByUid(users));
                    map.put("userName", users.getUserName());

                    map.put("tokenId", tokenId);
                    map.put("password", users.getPassword());
                   // return new Result(0, "返回数据",tokenId);
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        } else {
            return new Result(1, "查询异常");
        }
        return map;
    }
}
